(begin
  (use tcp      ;; TCP/IP
       srfi-18) ;; Threads
  (load "game_unix.scm")
  
  
  (define porta 9010) ;; constante, número da porta TCP
  
  
  ;; Servidor:
  ;; Aceita conexão TCP e chama interage.
  (define trata
    (lambda (s pid)
      ;; tcp-accept aceita uma conexão e retorna duas portas,
      ;; uma de entrada e uma de saída
      (let-values (((in out) (tcp-accept s)))
        ;; tcp-addresses devolve dois IPs -- o do servidor e
        ;; o do cliente que se conectou.
        (let-values (((meu-ip ip-dele) (tcp-addresses in)))
          ;; Comece a thread que interage:
          (thread-start! (make-thread
                          (lambda ()
                            (startgame 1 in out pid)
                            ;; após interagir, fechamos a porta:
                            (close-output-port out))))))
      
      ;; Depois de criar uma thread para cuidar da conexão, reinicie
      ;; (chama trata novamente):
      (trata s pid)))
  
  
  ;; Pega uma porta, começa a ouvir, e chama o tratador
  ;; de socket.
  (define inicia-servidor
    (lambda ()
      (let inicia ((socket (tcp-listen porta))
                   (count 0))
        (thread-start! (make-thread (trata socket count)))
        (set! count (+ count 1))
        (inicia socket count))))

);fim begin

  
(inicia-servidor)


